/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package analizador;

/**
 *
 * @author ANIBAL
 */
public class ValidarEntero extends AnalizadorLexico {

    private String cadenaEntero; 

    public ValidarEntero() {
    }

    public Token validarEntero(String cadena) {
        cadenaEntero = cadena;
        Token token = Token.TokenError;
        char[] arregloCar = cadenaEntero.toCharArray();//co
        int aux = 0;
        for (int x = 0; x < arregloCar.length; x++) {

            int num = 0;
            switch (aux) {
                case 0:
                    if (Character.isDigit(arregloCar[x]) && arregloCar[x] != '0') {
                        token = Token.TokenEntero;
                        aux = 1;
                    } else {
                        if (arregloCar[x] == '-') {
                            aux = 2;
                        } else {
                            if (arregloCar[x] == '0') {
                                token = Token.TokenEntero;
                                aux = 3;
                            } else {
                                return Token.TokenError;
                            }
                        }
                    }
                    break;
                case 1:
                    if (Character.isDigit(arregloCar[x])) {
                        token = Token.TokenEntero;
                    } else {
                        return Token.TokenError;
                    }
                    break;
                case 2:
                    if (Character.isDigit(arregloCar[x]) && arregloCar[x] != '0') {
                        token = Token.TokenEntero;
                        aux = 1;
                    } else {
                        if (arregloCar[x] == '0') {
                            token = Token.TokenEntero;
                            aux = 3;
                        } else {
                            return Token.TokenError;
                        }
                    }
                    break;
                case 3:

                    try {
                        String numero = String.valueOf(arregloCar[x]);
                        num = Integer.valueOf(numero);
                    } catch (Exception e) {
                    }
                    if (Character.isDigit(arregloCar[x]) && num < 8) {
                        token = Token.TokenEntero;
                        aux = 4;
                    } else {
                        if (arregloCar[x] == 'x') {
                            token = Token.TokenError;
                            aux = 5;
                        } else {
                            return Token.TokenError;
                        }
                    }
                    break;
                case 4:

                    try {
                        String numero = String.valueOf(arregloCar[x]);
                        num = Integer.valueOf(numero);
                    } catch (Exception e) {
                    }
                    if (Character.isDigit(arregloCar[x]) && (num < 8)) {
                        token = Token.TokenEntero;
                    } else {
                        return Token.TokenError;
                    }
                    break;
                case 5:
                    if (Character.isDigit(arregloCar[x]) || arregloCar[x] < 'g') {
                        token = Token.TokenEntero;
                    } else {
                        return Token.TokenError;
                    }
                    break;
            }
        }
        return token;
    }
}
